package com.bigShen.pattern.factory.main;

import com.bigShen.pattern.factory.House;
import com.bigShen.pattern.factory.WanKe;
import com.bigShen.pattern.factory.abst.HouseFactory;
import com.bigShen.pattern.factory.func.BinJiangFactory;
import com.bigShen.pattern.factory.func.Factory;
import com.bigShen.pattern.factory.simple.SimpleFactory;

/**
 * Created by lei.shen on 2018/9/17.
 */
public class FactoryMainTest {

    public static void main(String[] args) {

        // 不通过工厂，手工创建
        House directHouse = new WanKe();
        System.out.println(directHouse.getName());

        //简单工厂模式
        SimpleFactory simpleFactory = new SimpleFactory();
        House simpleHouse = simpleFactory.getHouse("绿地");
        System.out.println(simpleHouse.getName());

        // 工厂方法
        Factory funFactory = new BinJiangFactory();
        House funHouse = funFactory.getHouse();
        System.out.println(funHouse.getName());

        // 抽象工厂
        // 使用抽象类, 提供 几条流水线直接可以定义好， 支持哪些不支持哪些 直接就能看得到
        // 如果需要额外加一条流水线的话, 抽象方法只需要多提供一个方法, 内部加的这个方法不会影响别的流水线,
        // 使用者也只知道多了一个方法,并不需要清楚内部修改了哪些,
        // 符合设计模式的开闭原则(对扩展开放，对修改关闭)
        HouseFactory abstFactory = new HouseFactory();
        House abstHouse = abstFactory.getBinJiang();
        System.out.println(abstHouse.getName());

    }

}


